home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / latex209 / contrib / natbib / natbib.bst < prev    next >
Text File  |  1994-05-30  |  23KB  |  1,193 lines

  1. %% 
  2. %% This is file `natbib.bst', generated 
  3. %% on <1994/5/27> with the docstrip utility (2.2e).
  4. %% 
  5. %% The original source files were:
  6. %% 
  7. %% genbst.mbs  (with options: `ay,seq-lab,nm-rev,dt-beg,yr-par,vol-bf,volp-com,etal-it')
  8. %% ---------------------------------------- 
  9. %% *** A personal bib style -- PWD *** 
  10. %% 
  11. %% (Here are the specifications of the source file)
  12. %% \def\filename{genbst.mbs}
  13. %% \def\filedate{1994 February 7}
  14. %% \def\fileversion{1.2}
  15. %%   For use with BibTeX version 0.99a or later, LaTeX version 2.09
  16. %%-------------------------------------------------------------------
  17. %% NOTICE:
  18. %% This file may be used for non-profit purposes.
  19. %% It may not be distributed in exchange for money,
  20. %%   other than distribution costs.
  21. %%
  22. %% The author provides it `as is' and does not guarantee it in any way.
  23. %%
  24. %% Copyright (C) 1993 Patrick W. Daly
  25. %% Max-Planck-Institut f\"ur Aeronomie
  26. %% Postfach 20
  27. %% D-37189 Katlenburg-Lindau
  28. %% Germany
  29. %%
  30. %% E-mail:
  31. %% SPAN--     nsp::linmpi::daly    (note nsp also known as ecd1)
  32. %% Internet-- daly@linmpi.dnet.gwdg.de
  33. %%-----------------------------------------------------------
  34. %% \CharacterTable
  35. %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
  36. %%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
  37. %%   Digits        \0\1\2\3\4\5\6\7\8\9
  38. %%   Exclamation   \!     Double quote  \"     Hash (number) \#
  39. %%   Dollar        \$     Percent       \%     Ampersand     \&
  40. %%   Acute accent  \'     Left paren    \(     Right paren   \)
  41. %%   Asterisk      \*     Plus          \+     Comma         \,
  42. %%   Minus         \-     Point         \.     Solidus       \/
  43. %%   Colon         \:     Semicolon     \;     Less than     \<
  44. %%   Equals        \=     Greater than  \>     Question mark \?
  45. %%   Commercial at \@     Left bracket  \[     Backslash     \\
  46. %%   Right bracket \]     Circumflex    \^     Underscore    \_
  47. %%   Grave accent  \`     Left brace    \{     Vertical bar  \|
  48. %%   Right brace   \}     Tilde         \~}
  49. %%---------------------------------------------------------------------
  50.  % This is an author-year citation style bibliography. As such, it is
  51.  % non-standard LaTeX, and requires a style option to function properly.
  52.  % An appropriate style option is:   natbib.sty    by Patrick W. Daly
  53.  % The form of the \bibitem entries is
  54.  %   \bibitem[Jones et al.(1990)]{key}...
  55.  % The essential feature is that the label (the part in brackets) consists
  56.  % of the author names, as they should appear in the citation, with the year
  57.  % in parentheses following. There must be no space before the opening
  58.  % parenthesis!
  59.  % In natbib.sty, it is possible to define the type of enclosures that is
  60.  % really wanted (brackets or parentheses), but in either case, there must
  61.  % be parentheses in the label.
  62.  % The \cite command functions as follows:
  63.  %   \cite{key} ==>>                Jones et al. (1990)
  64.  %   \cite[]{key} ==>>              (Jones et al., 1990)
  65.  %   \cite[chap. 2]{key} ==>>       (Jones et al., 1990, chap. 2)
  66.  %   \cite[e.g.][]{key} ==>>        (e.g. Jones et al., 1990)
  67.  %   \cite[e.g.][p. 32]{key} ==>>   (e.g. Jones et al., p. 32)
  68.  %   \citeauthor{key}               Jones et al.
  69.  %   \citeyear{key}                 1990
  70. %%---------------------------------------------------------------------
  71.  
  72. ENTRY
  73.   { address
  74.     author
  75.     booktitle
  76.     chapter
  77.     edition
  78.     editor
  79.     howpublished
  80.     institution
  81.     journal
  82.     key
  83.     month
  84.     note
  85.     number
  86.     organization
  87.     pages
  88.     publisher
  89.     school
  90.     series
  91.     title
  92.     type
  93.     volume
  94.     year
  95.   }
  96.   {}
  97.   { label extra.label sort.label }
  98.  
  99. INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  100.  
  101. FUNCTION {init.state.consts}
  102. { #0 'before.all :=
  103.   #1 'mid.sentence :=
  104.   #2 'after.sentence :=
  105.   #3 'after.block :=
  106. }
  107.  
  108. STRINGS { s t }
  109.  
  110. FUNCTION {output.nonnull}
  111. { 's :=
  112.   output.state mid.sentence =
  113.     { ", " * write$ }
  114.     { output.state after.block =
  115.         { add.period$ write$
  116.           newline$
  117.           "\newblock " write$
  118.         }
  119.         { output.state before.all =
  120.             'write$
  121.             { add.period$ " " * write$ }
  122.           if$
  123.         }
  124.       if$
  125.       mid.sentence 'output.state :=
  126.     }
  127.   if$
  128.   s
  129. }
  130.  
  131. FUNCTION {output}
  132. { duplicate$ empty$
  133.     'pop$
  134.     'output.nonnull
  135.   if$
  136. }
  137.  
  138. FUNCTION {output.check}
  139. { 't :=
  140.   duplicate$ empty$
  141.     { pop$ "empty " t * " in " * cite$ * warning$ }
  142.     'output.nonnull
  143.   if$
  144. }
  145.  
  146. FUNCTION {output.bibitem}
  147. { newline$
  148.   "\bibitem[" write$
  149.   label write$
  150.   ")]{" write$
  151.   cite$ write$
  152.   "}" write$
  153.   newline$
  154.   ""
  155.   before.all 'output.state :=
  156. }
  157.  
  158. FUNCTION {fin.entry}
  159. { add.period$
  160.   write$
  161.   newline$
  162. }
  163.  
  164. FUNCTION {new.block}
  165. { output.state before.all =
  166.     'skip$
  167.     { after.block 'output.state := }
  168.   if$
  169. }
  170.  
  171. FUNCTION {new.sentence}
  172. { output.state after.block =
  173.     'skip$
  174.     { output.state before.all =
  175.         'skip$
  176.         { after.sentence 'output.state := }
  177.       if$
  178.     }
  179.   if$
  180. }
  181.  
  182. FUNCTION {not}
  183. {   { #0 }
  184.     { #1 }
  185.   if$
  186. }
  187.  
  188. FUNCTION {and}
  189. {   'skip$
  190.     { pop$ #0 }
  191.   if$
  192. }
  193.  
  194. FUNCTION {or}
  195. {   { pop$ #1 }
  196.     'skip$
  197.   if$
  198. }
  199.  
  200. FUNCTION {new.block.checkb}
  201. { empty$
  202.   swap$ empty$
  203.   and
  204.     'skip$
  205.     'new.block
  206.   if$
  207. }
  208.  
  209. FUNCTION {field.or.null}
  210. { duplicate$ empty$
  211.     { pop$ "" }
  212.     'skip$
  213.   if$
  214. }
  215.  
  216. FUNCTION {emphasize}
  217. { duplicate$ empty$
  218.     { pop$ "" }
  219.     { "{\em " swap$ * "}" * }
  220.   if$
  221. }
  222.  
  223. FUNCTION {bolden}
  224. { duplicate$ empty$
  225.     { pop$ "" }
  226.     { "{\bf " swap$ * "}" * }
  227.   if$
  228. }
  229.  
  230. INTEGERS { nameptr namesleft numnames }
  231.  
  232. FUNCTION {format.names}
  233. { 's :=
  234.   #1 'nameptr :=
  235.   s num.names$ 'numnames :=
  236.   numnames 'namesleft :=
  237.     { namesleft #0 > }
  238.     { s nameptr
  239.       "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=
  240.       nameptr #1 >
  241.         {
  242.           namesleft #1 >
  243.             { ", " * t * }
  244.             {
  245.               numnames #2 >
  246.                 { "," * }
  247.                 'skip$
  248.               if$
  249.               t "others" =
  250.                 { " " * "et~al." emphasize * }
  251.                 { " and " * t * }
  252.               if$
  253.             }
  254.           if$
  255.         }
  256.         't
  257.       if$
  258.       nameptr #1 + 'nameptr :=
  259.       namesleft #1 - 'namesleft :=
  260.     }
  261.   while$
  262. }
  263.  
  264. FUNCTION {format.names.ed}
  265. { 's :=
  266.   #1 'nameptr :=
  267.   s num.names$ 'numnames :=
  268.   numnames 'namesleft :=
  269.     { namesleft #0 > }
  270.     { s nameptr
  271.       "{f.~}{vv~}{ll}{, jj}"
  272.       format.name$ 't :=
  273.       nameptr #1 >
  274.         {
  275.           namesleft #1 >
  276.             { ", " * t * }
  277.             {
  278.               numnames #2 >
  279.                 { "," * }
  280.                 'skip$
  281.               if$
  282.               t "others" =
  283.                 { " " * "et~al." emphasize * }
  284.                 { " and " * t * }
  285.               if$
  286.             }
  287.           if$
  288.         }
  289.         't
  290.       if$
  291.       nameptr #1 + 'nameptr :=
  292.       namesleft #1 - 'namesleft :=
  293.     }
  294.   while$
  295. }
  296.  
  297. FUNCTION {format.key}
  298. { empty$
  299.     { key field.or.null }
  300.     { "" }
  301.   if$
  302. }
  303.  
  304. FUNCTION {format.authors}
  305. { author empty$
  306.     { "" }
  307.     { author format.names }
  308.   if$
  309. }
  310.  
  311. FUNCTION {format.editors}
  312. { editor empty$
  313.     { "" }
  314.     { editor format.names
  315.       editor num.names$ #1 >
  316.         { ", editors" * }
  317.         { ", editor" * }
  318.       if$
  319.     }
  320.   if$
  321. }
  322.  
  323. FUNCTION {format.in.editors}
  324. { editor empty$
  325.     { "" }
  326.     { editor format.names.ed
  327.       editor num.names$ #1 >
  328.         { ", editors" * }
  329.         { ", editor" * }
  330.       if$
  331.     }
  332.   if$
  333. }
  334.  
  335. FUNCTION {format.title}
  336. { title empty$
  337.     { "" }
  338.     { title "t" change.case$
  339.     }
  340.   if$
  341. }
  342.  
  343. FUNCTION {n.dashify}
  344. { 't :=
  345.   ""
  346.     { t empty$ not }
  347.     { t #1 #1 substring$ "-" =
  348.         { t #1 #2 substring$ "--" = not
  349.             { "--" *
  350.               t #2 global.max$ substring$ 't :=
  351.             }
  352.             {   { t #1 #1 substring$ "-" = }
  353.                 { "-" *
  354.                   t #2 global.max$ substring$ 't :=
  355.                 }
  356.               while$
  357.             }
  358.           if$
  359.         }
  360.         { t #1 #1 substring$ *
  361.           t #2 global.max$ substring$ 't :=
  362.         }
  363.       if$
  364.     }
  365.   while$
  366. }
  367.  
  368. FUNCTION {word.in}
  369. { "In " }
  370.  
  371. FUNCTION {format.date}
  372. { year duplicate$ empty$
  373.     { "empty year in " cite$ * "; set to ????" * warning$
  374.        pop$ "????" }
  375.     'skip$
  376.   if$
  377.   before.all 'output.state :=
  378.   " (" swap$ * extra.label * ")" *
  379. }
  380.  
  381. FUNCTION {format.btitle}
  382. { title emphasize
  383. }
  384.  
  385. FUNCTION {tie.or.space.connect}
  386. { duplicate$ text.length$ #3 <
  387.     { "~" }
  388.     { " " }
  389.   if$
  390.   swap$ * *
  391. }
  392.  
  393. FUNCTION {either.or.check}
  394. { empty$
  395.     'pop$
  396.     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  397.   if$
  398. }
  399.  
  400. FUNCTION {format.bvolume}
  401. { volume empty$
  402.     { "" }
  403.     { "volume" volume tie.or.space.connect
  404.       series empty$
  405.         'skip$
  406.         { " of " * series emphasize * }
  407.       if$
  408.       "volume and number" number either.or.check
  409.     }
  410.   if$
  411. }
  412.  
  413. FUNCTION {format.number.series}
  414. { volume empty$
  415.     { number empty$
  416.         { series field.or.null }
  417.         { output.state mid.sentence =
  418.             { "number" }
  419.             { "Number" }
  420.           if$
  421.           number tie.or.space.connect
  422.           series empty$
  423.             { "there's a number but no series in " cite$ * warning$ }
  424.             { " in " * series * }
  425.           if$
  426.         }
  427.       if$
  428.     }
  429.     { "" }
  430.   if$
  431. }
  432.  
  433. FUNCTION {format.edition}
  434. { edition empty$
  435.     { "" }
  436.     { output.state mid.sentence =
  437.         { edition "l" change.case$ " edition" * }
  438.         { edition "t" change.case$ " edition" * }
  439.       if$
  440.     }
  441.   if$
  442. }
  443.  
  444. INTEGERS { multiresult }
  445.  
  446. FUNCTION {multi.page.check}
  447. { 't :=
  448.   #0 'multiresult :=
  449.     { multiresult not
  450.       t empty$ not
  451.       and
  452.     }
  453.     { t #1 #1 substring$
  454.       duplicate$ "-" =
  455.       swap$ duplicate$ "," =
  456.       swap$ "+" =
  457.       or or
  458.         { #1 'multiresult := }
  459.         { t #2 global.max$ substring$ 't := }
  460.       if$
  461.     }
  462.   while$
  463.   multiresult
  464. }
  465.  
  466. FUNCTION {format.pages}
  467. { pages empty$
  468.     { "" }
  469.     { pages multi.page.check
  470.         { "pages" pages n.dashify tie.or.space.connect }
  471.         { "page" pages tie.or.space.connect }
  472.       if$
  473.     }
  474.   if$
  475. }
  476.  
  477. FUNCTION {format.vol.num.pages}
  478. { volume field.or.null
  479.   bolden
  480.   number empty$
  481.     'skip$
  482.     { "(" number * ")" * *
  483.       volume empty$
  484.         { "there's a number but no volume in " cite$ * warning$ }
  485.         'skip$
  486.       if$
  487.     }
  488.   if$
  489.   pages empty$
  490.     'skip$
  491.     { duplicate$ empty$
  492.         { pop$ format.pages }
  493.         { ", " * pages n.dashify * }
  494.       if$
  495.     }
  496.   if$
  497. }
  498.  
  499. FUNCTION {format.chapter.pages}
  500. { chapter empty$
  501.     'format.pages
  502.     { type empty$
  503.         { "chapter" }
  504.         { type "l" change.case$ }
  505.       if$
  506.       chapter tie.or.space.connect
  507.       pages empty$
  508.         'skip$
  509.         { ", " * format.pages * }
  510.       if$
  511.     }
  512.   if$
  513. }
  514.  
  515. FUNCTION {format.in.ed.booktitle}
  516. { booktitle empty$
  517.     { "" }
  518.     { editor empty$
  519.         { word.in booktitle emphasize * }
  520.         { word.in format.in.editors * ", " * booktitle emphasize * }
  521.       if$
  522.     }
  523.   if$
  524. }
  525.  
  526. FUNCTION {format.thesis.type}
  527. { type empty$
  528.     'skip$
  529.     { pop$
  530.       type "t" change.case$
  531.     }
  532.   if$
  533. }
  534.  
  535. FUNCTION {format.tr.number}
  536. { type empty$
  537.     { "Technical Report" }
  538.     'type
  539.   if$
  540.   number empty$
  541.     { "t" change.case$ }
  542.     { number tie.or.space.connect }
  543.   if$
  544. }
  545.  
  546. FUNCTION {format.article.crossref}
  547. {
  548.   word.in
  549.   "\cite{" * crossref * "}" *
  550. }
  551.  
  552. FUNCTION {format.book.crossref}
  553. { volume empty$
  554.     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  555.       word.in
  556.     }
  557.     { "Volume" volume tie.or.space.connect
  558.       " of " *
  559.     }
  560.   if$
  561.   "\cite{" * crossref * "}" *
  562. }
  563.  
  564. FUNCTION {format.incoll.inproc.crossref}
  565. {
  566.   word.in
  567.   "\cite{" * crossref * "}" *
  568. }
  569.  
  570. FUNCTION {article}
  571. { output.bibitem
  572.   format.authors "author" output.check
  573.   author format.key output
  574.   format.date "year" output.check
  575.   new.block
  576.   format.title "title" output.check
  577.   new.block
  578.   crossref missing$
  579.     { journal emphasize "journal" output.check
  580.       format.vol.num.pages output
  581.     }
  582.     { format.article.crossref output.nonnull
  583.       format.pages output
  584.     }
  585.   if$
  586.   new.block
  587.   note output
  588.   fin.entry
  589. }
  590.  
  591. FUNCTION {book}
  592. { output.bibitem
  593.   author empty$
  594.     { format.editors "author and editor" output.check
  595.       editor format.key output
  596.     }
  597.     { format.authors output.nonnull
  598.       crossref missing$
  599.         { "author and editor" editor either.or.check }
  600.         'skip$
  601.       if$
  602.     }
  603.   if$
  604.   format.date "year" output.check
  605.   new.block
  606.   format.btitle "title" output.check
  607.   crossref missing$
  608.     { format.bvolume output
  609.       new.block
  610.       format.number.series output
  611.       new.sentence
  612.       publisher "publisher" output.check
  613.       address output
  614.     }
  615.     {
  616.       new.block
  617.       format.book.crossref output.nonnull
  618.     }
  619.   if$
  620.   format.edition output
  621.   new.block
  622.   note output
  623.   fin.entry
  624. }
  625.  
  626. FUNCTION {booklet}
  627. { output.bibitem
  628.   format.authors output
  629.   author format.key output
  630.   format.date "year" output.check
  631.   new.block
  632.   format.title "title" output.check
  633.   new.block
  634.   howpublished output
  635.   address output
  636.   new.block
  637.   note output
  638.   fin.entry
  639. }
  640.  
  641. FUNCTION {inbook}
  642. { output.bibitem
  643.   author empty$
  644.     { format.editors "author and editor" output.check
  645.       editor format.key output
  646.     }
  647.     { format.authors output.nonnull
  648.       crossref missing$
  649.         { "author and editor" editor either.or.check }
  650.         'skip$
  651.       if$
  652.     }
  653.   if$
  654.   format.date "year" output.check
  655.   new.block
  656.   format.btitle "title" output.check
  657.   crossref missing$
  658.     { format.bvolume output
  659.       format.chapter.pages "chapter and pages" output.check
  660.       new.block
  661.       format.number.series output
  662.       new.sentence
  663.       publisher "publisher" output.check
  664.       address output
  665.     }
  666.     { format.chapter.pages "chapter and pages" output.check
  667.       new.block
  668.       format.book.crossref output.nonnull
  669.     }
  670.   if$
  671.   format.edition output
  672.   new.block
  673.   note output
  674.   fin.entry
  675. }
  676.  
  677. FUNCTION {incollection}
  678. { output.bibitem
  679.   format.authors "author" output.check
  680.   author format.key output
  681.   format.date "year" output.check
  682.   new.block
  683.   format.title "title" output.check
  684.   new.block
  685.   crossref missing$
  686.     { format.in.ed.booktitle "booktitle" output.check
  687.       format.bvolume output
  688.       format.number.series output
  689.       format.chapter.pages output
  690.       new.sentence
  691.       publisher "publisher" output.check
  692.       address output
  693.       format.edition output
  694.     }
  695.     { format.incoll.inproc.crossref output.nonnull
  696.       format.chapter.pages output
  697.     }
  698.   if$
  699.   new.block
  700.   note output
  701.   fin.entry
  702. }
  703.  
  704. FUNCTION {inproceedings}
  705. { output.bibitem
  706.   format.authors "author" output.check
  707.   author format.key output
  708.   format.date "year" output.check
  709.   new.block
  710.   format.title "title" output.check
  711.   new.block
  712.   crossref missing$
  713.     { format.in.ed.booktitle "booktitle" output.check
  714.       format.bvolume output
  715.       format.number.series output
  716.       format.pages output
  717.       address output
  718.       new.sentence
  719.       organization output
  720.       publisher output
  721.     }
  722.     { format.incoll.inproc.crossref output.nonnull
  723.       format.pages output
  724.     }
  725.   if$
  726.   new.block
  727.   note output
  728.   fin.entry
  729. }
  730.  
  731. FUNCTION {conference} { inproceedings }
  732.  
  733. FUNCTION {manual}
  734. { output.bibitem
  735.   format.authors output
  736.   author format.key output
  737.   format.date "year" output.check
  738.   new.block
  739.   format.btitle "title" output.check
  740.   organization address new.block.checkb
  741.   organization output
  742.   address output
  743.   format.edition output
  744.   new.block
  745.   note output
  746.   fin.entry
  747. }
  748.  
  749. FUNCTION {mastersthesis}
  750. { output.bibitem
  751.   format.authors "author" output.check
  752.   author format.key output
  753.   format.date "year" output.check
  754.   new.block
  755.   format.btitle "title" output.check
  756.   new.block
  757.   "Master's thesis" format.thesis.type output.nonnull
  758.   school "school" output.check
  759.   address output
  760.   new.block
  761.   note output
  762.   fin.entry
  763. }
  764.  
  765. FUNCTION {misc}
  766. { output.bibitem
  767.   format.authors output
  768.   author format.key output
  769.   format.date "year" output.check
  770.   new.block
  771.   format.title output
  772.   new.block
  773.   howpublished output
  774.   new.block
  775.   note output
  776.   fin.entry
  777. }
  778.  
  779. FUNCTION {phdthesis}
  780. { output.bibitem
  781.   format.authors "author" output.check
  782.   author format.key output
  783.   format.date "year" output.check
  784.   new.block
  785.   format.btitle "title" output.check
  786.   new.block
  787.   "Ph.D. thesis" format.thesis.type output.nonnull
  788.   school "school" output.check
  789.   address output
  790.   new.block
  791.   note output
  792.   fin.entry
  793. }
  794.  
  795. FUNCTION {proceedings}
  796. { output.bibitem
  797.   format.editors output
  798.   editor format.key output
  799.   format.date "year" output.check
  800.   new.block
  801.   format.btitle "title" output.check
  802.   format.bvolume output
  803.   format.number.series output
  804.   address output
  805.   new.sentence
  806.   organization output
  807.   publisher output
  808.   new.block
  809.   note output
  810.   fin.entry
  811. }
  812.  
  813. FUNCTION {techreport}
  814. { output.bibitem
  815.   format.authors "author" output.check
  816.   author format.key output
  817.   format.date "year" output.check
  818.   new.block
  819.   format.title "title" output.check
  820.   new.block
  821.   format.tr.number output.nonnull
  822.   institution "institution" output.check
  823.   address output
  824.   new.block
  825.   note output
  826.   fin.entry
  827. }
  828.  
  829. FUNCTION {unpublished}
  830. { output.bibitem
  831.   format.authors "author" output.check
  832.   author format.key output
  833.   format.date "year" output.check
  834.   new.block
  835.   format.title "title" output.check
  836.   new.block
  837.   note "note" output.check
  838.   fin.entry
  839. }
  840.  
  841. FUNCTION {default.type} { misc }
  842.  
  843. MACRO {jan} {"January"}
  844.  
  845. MACRO {feb} {"February"}
  846.  
  847. MACRO {mar} {"March"}
  848.  
  849. MACRO {apr} {"April"}
  850.  
  851. MACRO {may} {"May"}
  852.  
  853. MACRO {jun} {"June"}
  854.  
  855. MACRO {jul} {"July"}
  856.  
  857. MACRO {aug} {"August"}
  858.  
  859. MACRO {sep} {"September"}
  860.  
  861. MACRO {oct} {"October"}
  862.  
  863. MACRO {nov} {"November"}
  864.  
  865. MACRO {dec} {"December"}
  866.  
  867. MACRO {acmcs} {"ACM Computing Surveys"}
  868.  
  869. MACRO {acta} {"Acta Informatica"}
  870.  
  871. MACRO {cacm} {"Communications of the ACM"}
  872.  
  873. MACRO {ibmjrd} {"IBM Journal of Research and Development"}
  874.  
  875. MACRO {ibmsj} {"IBM Systems Journal"}
  876.  
  877. MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
  878.  
  879. MACRO {ieeetc} {"IEEE Transactions on Computers"}
  880.  
  881. MACRO {ieeetcad}
  882.  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
  883.  
  884. MACRO {ipl} {"Information Processing Letters"}
  885.  
  886. MACRO {jacm} {"Journal of the ACM"}
  887.  
  888. MACRO {jcss} {"Journal of Computer and System Sciences"}
  889.  
  890. MACRO {scp} {"Science of Computer Programming"}
  891.  
  892. MACRO {sicomp} {"SIAM Journal on Computing"}
  893.  
  894. MACRO {tocs} {"ACM Transactions on Computer Systems"}
  895.  
  896. MACRO {tods} {"ACM Transactions on Database Systems"}
  897.  
  898. MACRO {tog} {"ACM Transactions on Graphics"}
  899.  
  900. MACRO {toms} {"ACM Transactions on Mathematical Software"}
  901.  
  902. MACRO {toois} {"ACM Transactions on Office Information Systems"}
  903.  
  904. MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
  905.  
  906. MACRO {tcs} {"Theoretical Computer Science"}
  907.  
  908. READ
  909.  
  910. FUNCTION {sortify}
  911. { purify$
  912.   "l" change.case$
  913. }
  914.  
  915. INTEGERS { len }
  916.  
  917. FUNCTION {chop.word}
  918. { 's :=
  919.   'len :=
  920.   s #1 len substring$ =
  921.     { s len #1 + global.max$ substring$ }
  922.     's
  923.   if$
  924. }
  925.  
  926. FUNCTION {format.lab.names}
  927. { 's :=
  928.   s #1 "{vv~}{ll}" format.name$
  929.   s num.names$ duplicate$
  930.   #2 >
  931.     { pop$ " " * "et~al." emphasize * }
  932.     { #2 <
  933.         'skip$
  934.         { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  935.             { " " * "et~al." emphasize * }
  936.             { " and " * s #2 "{vv~}{ll}" format.name$ * }
  937.           if$
  938.         }
  939.       if$
  940.     }
  941.   if$
  942. }
  943.  
  944. FUNCTION {author.key.label}
  945. { author empty$
  946.     { key empty$
  947.         { cite$ #1 #3 substring$ }
  948.         'key
  949.       if$
  950.     }
  951.     { author format.lab.names }
  952.   if$
  953. }
  954.  
  955. FUNCTION {author.editor.key.label}
  956. { author empty$
  957.     { editor empty$
  958.         { key empty$
  959.             { cite$ #1 #3 substring$ }
  960.             'key
  961.           if$
  962.         }
  963.         { editor format.lab.names }
  964.       if$
  965.     }
  966.     { author format.lab.names }
  967.   if$
  968. }
  969.  
  970. FUNCTION {editor.key.label}
  971. { editor empty$
  972.     { key empty$
  973.         { cite$ #1 #3 substring$ }
  974.         'key
  975.       if$
  976.     }
  977.     { editor format.lab.names }
  978.   if$
  979. }
  980.  
  981. FUNCTION {calc.label}
  982. { type$ "book" =
  983.   type$ "inbook" =
  984.   or
  985.     'author.editor.key.label
  986.     { type$ "proceedings" =
  987.         'editor.key.label
  988.         'author.key.label
  989.       if$
  990.     }
  991.   if$
  992.   "("
  993.   *
  994.   year duplicate$ empty$
  995.      { pop$ "????" }
  996.      { purify$ #-1 #4 substring$ }
  997.   if$
  998.   *
  999.   'label :=
  1000. }
  1001.  
  1002. FUNCTION {sort.format.names}
  1003. { 's :=
  1004.   #1 'nameptr :=
  1005.   ""
  1006.   s num.names$ 'numnames :=
  1007.   numnames 'namesleft :=
  1008.     { namesleft #0 > }
  1009.     { nameptr #1 >
  1010.         { "   " * }
  1011.         'skip$
  1012.       if$
  1013.       s nameptr
  1014.       "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}"
  1015.       format.name$ 't :=
  1016.       nameptr numnames = t "others" = and
  1017.         { "et al" * }
  1018.         { numnames #2 > nameptr #2 = and
  1019.           { "zzzzzz" * #1 'namesleft := }
  1020.           { t sortify * }
  1021.         if$
  1022.         }
  1023.       if$
  1024.       nameptr #1 + 'nameptr :=
  1025.       namesleft #1 - 'namesleft :=
  1026.     }
  1027.   while$
  1028. }
  1029.  
  1030. FUNCTION {sort.format.title}
  1031. { 't :=
  1032.   "A " #2
  1033.     "An " #3
  1034.       "The " #4 t chop.word
  1035.     chop.word
  1036.   chop.word
  1037.   sortify
  1038.   #1 global.max$ substring$
  1039. }
  1040.  
  1041. FUNCTION {author.sort}
  1042. { author empty$
  1043.     { key empty$
  1044.         { "to sort, need author or key in " cite$ * warning$
  1045.           ""
  1046.         }
  1047.         { key sortify }
  1048.       if$
  1049.     }
  1050.     { author sort.format.names }
  1051.   if$
  1052. }
  1053.  
  1054. FUNCTION {author.editor.sort}
  1055. { author empty$
  1056.     { editor empty$
  1057.         { key empty$
  1058.             { "to sort, need author, editor, or key in " cite$ * warning$
  1059.               ""
  1060.             }
  1061.             { key sortify }
  1062.           if$
  1063.         }
  1064.         { editor sort.format.names }
  1065.       if$
  1066.     }
  1067.     { author sort.format.names }
  1068.   if$
  1069. }
  1070.  
  1071. FUNCTION {editor.sort}
  1072. { editor empty$
  1073.     { key empty$
  1074.         { "to sort, need editor or key in " cite$ * warning$
  1075.           ""
  1076.         }
  1077.         { key sortify }
  1078.       if$
  1079.     }
  1080.     { editor sort.format.names }
  1081.   if$
  1082. }
  1083.  
  1084. FUNCTION {presort}
  1085. { calc.label
  1086.   label sortify
  1087.   "    "
  1088.   *
  1089.   type$ "book" =
  1090.   type$ "inbook" =
  1091.   or
  1092.     'author.editor.sort
  1093.     { type$ "proceedings" =
  1094.         'editor.sort
  1095.         'author.sort
  1096.       if$
  1097.     }
  1098.   if$
  1099.   #1 entry.max$ substring$
  1100.   'sort.label :=
  1101.   sort.label
  1102.   *
  1103.   "    "
  1104.   *
  1105.   title field.or.null
  1106.   sort.format.title
  1107.   *
  1108.   #1 entry.max$ substring$
  1109.   'sort.key$ :=
  1110. }
  1111.  
  1112. ITERATE {presort}
  1113.  
  1114. SORT
  1115.  
  1116. STRINGS { last.label next.extra }
  1117.  
  1118. INTEGERS { last.extra.num }
  1119.  
  1120. FUNCTION {initialize.extra.label.stuff}
  1121. { #0 int.to.chr$ 'last.label :=
  1122.   "" 'next.extra :=
  1123.   #0 'last.extra.num :=
  1124. }
  1125.  
  1126. FUNCTION {forward.pass}
  1127. { last.label label =
  1128.     { last.extra.num #1 + 'last.extra.num :=
  1129.       last.extra.num int.to.chr$ 'extra.label :=
  1130.     }
  1131.     { "a" chr.to.int$ 'last.extra.num :=
  1132.       "" 'extra.label :=
  1133.       label 'last.label :=
  1134.     }
  1135.   if$
  1136. }
  1137.  
  1138. FUNCTION {reverse.pass}
  1139. { next.extra "b" =
  1140.     { "a" 'extra.label := }
  1141.     'skip$
  1142.   if$
  1143.   extra.label 'next.extra :=
  1144.   label extra.label * 'label :=
  1145. }
  1146.  
  1147. EXECUTE {initialize.extra.label.stuff}
  1148.  
  1149. ITERATE {forward.pass}
  1150.  
  1151. REVERSE {reverse.pass}
  1152.  
  1153. FUNCTION {bib.sort.order}
  1154. { sort.label
  1155.   "    "
  1156.   *
  1157.   year field.or.null sortify
  1158.   *
  1159.   "    "
  1160.   *
  1161.   title field.or.null
  1162.   sort.format.title
  1163.   *
  1164.   #1 entry.max$ substring$
  1165.   'sort.key$ :=
  1166. }
  1167.  
  1168. ITERATE {bib.sort.order}
  1169.  
  1170. SORT
  1171.  
  1172. FUNCTION {begin.bib}
  1173. { preamble$ empty$
  1174.     'skip$
  1175.     { preamble$ write$ newline$ }
  1176.   if$
  1177.   "\begin{thebibliography}{}" write$ newline$
  1178. }
  1179.  
  1180. EXECUTE {begin.bib}
  1181.  
  1182. EXECUTE {init.state.consts}
  1183.  
  1184. ITERATE {call.type$}
  1185.  
  1186. FUNCTION {end.bib}
  1187. { newline$
  1188.   "\end{thebibliography}" write$ newline$
  1189. }
  1190.  
  1191. EXECUTE {end.bib}
  1192. %% End of customized bst file 
  1193.